/*
 * @Author: Guojian Wang 1085844536@qq.com
 * @Date: 2022-12-08 02:26:36
 * @LastEditTime: 2022-12-13 21:08:35
 * @LastEditors: Guojian Wang 1085844536@qq.com
 * @FilePath: \CloundMusic\utils\request.js
 * @Description:发送 ajax 请求
 *
 * 1.封装功能函数
 *      1.功能点明确
 *      2.函数内部应该保留固定代码(静态的)
 *      3.将动态的数据抽取出成形参，由使用者根据自身的情况动态传入实参
 *      4.一个良好的功能函数应该设置形参的默认值(ES6 的形参默认值)
 * 2.封装功能组件
 *      1.功能点明确
 *      2.组件内部保留静态的代码
 *      3.将动态的数据抽取成 props 参数，由使用者根据自生的情况以标签属性的形式动态传入 props 数据
 *      4.一个良好的组件应该设置组件的必要性及数据类型
 *          props: {
 *              msg: {
 *                  required: true,
 *                  default: 默认值,
 *                  type: String
 *              }
 *          }
 */
import config from './config';

export default (url, data = {}, method = 'GET') => {
    return new Promise((resolve, reject) => {
        // 1.new Promise 初始化  Promise 的实例为 pending
        wx.request({
            url: config.mobileHost + url,
            data,
            method,
            header: {
                cookie: wx.getStorageSync('cookies')
                    ? wx
                          .getStorageSync('cookies')
                          .find((item) => item.indexOf('MUSIC_U') !== -1)
                    : '',
            },
            success: (res) => {
                // 登录请求
                if (data.isLogin) {
                    // 将用户的 cookie 存入至本地
                    wx.setStorage({
                        key: 'cookies',
                        data: res.cookies,
                    });
                }
                // 修改 Promise 的状态为成功状态 resolved
                resolve(res.data);
            },
            fail: (err) => {
                // 修改 Promise 的状态为失败状态 reject
                reject(err);
            },
        });
    });
};
